import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        //共有T组数据
        int T = in.nextInt();
        for (int k = 0; k < T; k++) {
            //共有n块积木，即每个字符串n个字符
            int n = in.nextInt();
            String x = in.next();
            char[] s = x.toCharArray();
            //先判断是不是回文串，以及能不能变成回文串，如果可以，就不再进行下面的操作
            if (get1(s)) System.out.println(new String(s));
            //不能变成回文串，开始将字符串构成的数字尽量变得小，即将从左到右第一个不为'0'的字符变成'0'
            else {
                s = x.toCharArray();
                int i = 0;
                while (i < s.length) {
                    if (s[i] - '0' > 0) {
                        s[i] = '0';
                        break;
                    }
                    i++;
                }
                System.out.println(new String(s));
            }
        }
    }

    public static boolean get1(char[] s) {
        int i = 0, j = s.length - 1;
        boolean flag = false;
        while (i <= j) {
            if (i == j) {
                //如果i==j时，flag还是为false，则说明两端的数都是回文的，只用把正中间的变成'0'，使数字尽量小即可
                if (!flag) {
                    s[i] = '0';
                }
                break;
            }
            if (s[i] == s[j]) {
                i++;
                j--;
            } else {
                //如果遇到对称位置上不相等，则将其变成相等，且要取较小的数字。
                //后面如果再次出现不相等的情况，则直接返回false，说明不可能变成回文串了。
                if (!flag) {
                    if (s[i] - s[j] < 0) {
                        s[j] = s[i];
                    } else {
                        s[i] = s[j];
                    }
                    i++;
                    j--;
                    flag = true;
                } else {
                    return false;
                }
            }
        }
        return true;
    }
}
